{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e09325b0-0a7a-49d7-8c25-bf0bb6e3f966",
   "metadata": {},
   "outputs": [],
   "source": [
    "# GF_JUPYTER_NB_732_Drawing.ipynb\n",
    "# Create by GF 2025-04-21"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "79a8dede-7244-486d-9d9a-644cdca67575",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import pandas\n",
    "# ..................................................\n",
    "import GF_PY3_CLASS_Finance_Stock_Pandas_2_x\n",
    "import GF_PY3_CLASS_Finance_Stock_Matplotlib_3_7_x\n",
    "import GF_PY3_VARS_Columns_Name_Mapping\n",
    "# ..................................................\n",
    "COL_NAME_CONFUSED_TO_CSV_STANDARD = GF_PY3_VARS_Columns_Name_Mapping.COL_NAME_CONFUSED_TO_CSV_STANDARD\n",
    "Finance_Stock_Pandas_2_x          = GF_PY3_CLASS_Finance_Stock_Pandas_2_x.Finance_Stock_Pandas_2_x\n",
    "Finance_Stock_Matplotlib_3_7_x    = GF_PY3_CLASS_Finance_Stock_Matplotlib_3_7_x.Finance_Stock_Matplotlib_3_7_x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "372c4633-3a76-4baf-b43c-d6afb8aad74c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>名称</th>\n",
       "      <th>code</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>pre_close</th>\n",
       "      <th>change</th>\n",
       "      <th>chg_pct</th>\n",
       "      <th>换手率</th>\n",
       "      <th>volume</th>\n",
       "      <th>amount</th>\n",
       "      <th>总市值</th>\n",
       "      <th>流通市值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2005-01-31</td>\n",
       "      <td>湖北宜化</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.78</td>\n",
       "      <td>6.87</td>\n",
       "      <td>6.70</td>\n",
       "      <td>6.81</td>\n",
       "      <td>6.94</td>\n",
       "      <td>-0.13</td>\n",
       "      <td>-0.018732</td>\n",
       "      <td>0.018862</td>\n",
       "      <td>2669130</td>\n",
       "      <td>18135800</td>\n",
       "      <td>1678910000</td>\n",
       "      <td>963652000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2005-02-01</td>\n",
       "      <td>湖北宜化</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.78</td>\n",
       "      <td>6.89</td>\n",
       "      <td>6.30</td>\n",
       "      <td>6.42</td>\n",
       "      <td>6.81</td>\n",
       "      <td>-0.39</td>\n",
       "      <td>-0.057269</td>\n",
       "      <td>0.027348</td>\n",
       "      <td>3869880</td>\n",
       "      <td>25333700</td>\n",
       "      <td>1582760000</td>\n",
       "      <td>908465000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2005-02-02</td>\n",
       "      <td>湖北宜化</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.42</td>\n",
       "      <td>6.99</td>\n",
       "      <td>6.42</td>\n",
       "      <td>6.90</td>\n",
       "      <td>6.42</td>\n",
       "      <td>0.48</td>\n",
       "      <td>0.074766</td>\n",
       "      <td>0.032928</td>\n",
       "      <td>4659550</td>\n",
       "      <td>31345900</td>\n",
       "      <td>1701090000</td>\n",
       "      <td>976388000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2005-02-03</td>\n",
       "      <td>湖北宜化</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.00</td>\n",
       "      <td>7.15</td>\n",
       "      <td>6.73</td>\n",
       "      <td>6.75</td>\n",
       "      <td>6.90</td>\n",
       "      <td>-0.15</td>\n",
       "      <td>-0.021739</td>\n",
       "      <td>0.028556</td>\n",
       "      <td>4040880</td>\n",
       "      <td>28086200</td>\n",
       "      <td>1664110000</td>\n",
       "      <td>955162000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2005-02-04</td>\n",
       "      <td>湖北宜化</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.75</td>\n",
       "      <td>7.05</td>\n",
       "      <td>6.71</td>\n",
       "      <td>7.00</td>\n",
       "      <td>6.75</td>\n",
       "      <td>0.25</td>\n",
       "      <td>0.037037</td>\n",
       "      <td>0.017178</td>\n",
       "      <td>2430800</td>\n",
       "      <td>16818500</td>\n",
       "      <td>1725750000</td>\n",
       "      <td>990538000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2647</th>\n",
       "      <td>2015-12-25</td>\n",
       "      <td>湖北宜化</td>\n",
       "      <td>'000422</td>\n",
       "      <td>8.03</td>\n",
       "      <td>8.05</td>\n",
       "      <td>7.93</td>\n",
       "      <td>8.03</td>\n",
       "      <td>7.99</td>\n",
       "      <td>0.04</td>\n",
       "      <td>0.005006</td>\n",
       "      <td>0.021132</td>\n",
       "      <td>18974000</td>\n",
       "      <td>151673000</td>\n",
       "      <td>7209870000</td>\n",
       "      <td>7209870000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2648</th>\n",
       "      <td>2015-12-28</td>\n",
       "      <td>湖北宜化</td>\n",
       "      <td>'000422</td>\n",
       "      <td>8.03</td>\n",
       "      <td>8.08</td>\n",
       "      <td>7.70</td>\n",
       "      <td>7.71</td>\n",
       "      <td>8.03</td>\n",
       "      <td>-0.32</td>\n",
       "      <td>-0.039851</td>\n",
       "      <td>0.030821</td>\n",
       "      <td>27672800</td>\n",
       "      <td>218869000</td>\n",
       "      <td>6922550000</td>\n",
       "      <td>6922550000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2649</th>\n",
       "      <td>2015-12-29</td>\n",
       "      <td>湖北宜化</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.72</td>\n",
       "      <td>7.85</td>\n",
       "      <td>7.69</td>\n",
       "      <td>7.84</td>\n",
       "      <td>7.71</td>\n",
       "      <td>0.13</td>\n",
       "      <td>0.016861</td>\n",
       "      <td>0.015886</td>\n",
       "      <td>14263800</td>\n",
       "      <td>110789000</td>\n",
       "      <td>7039280000</td>\n",
       "      <td>7039280000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2650</th>\n",
       "      <td>2015-12-30</td>\n",
       "      <td>湖北宜化</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.86</td>\n",
       "      <td>7.93</td>\n",
       "      <td>7.75</td>\n",
       "      <td>7.93</td>\n",
       "      <td>7.84</td>\n",
       "      <td>0.09</td>\n",
       "      <td>0.011480</td>\n",
       "      <td>0.018662</td>\n",
       "      <td>16755900</td>\n",
       "      <td>131567000</td>\n",
       "      <td>7120080000</td>\n",
       "      <td>7120080000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2651</th>\n",
       "      <td>2015-12-31</td>\n",
       "      <td>湖北宜化</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.93</td>\n",
       "      <td>7.95</td>\n",
       "      <td>7.76</td>\n",
       "      <td>7.77</td>\n",
       "      <td>7.93</td>\n",
       "      <td>-0.16</td>\n",
       "      <td>-0.020177</td>\n",
       "      <td>0.015498</td>\n",
       "      <td>13915200</td>\n",
       "      <td>109318000</td>\n",
       "      <td>6976420000</td>\n",
       "      <td>6976420000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2652 rows × 15 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            date    名称     code  open  high   low  close  pre_close  change  \\\n",
       "0     2005-01-31  湖北宜化  '000422  6.78  6.87  6.70   6.81       6.94   -0.13   \n",
       "1     2005-02-01  湖北宜化  '000422  6.78  6.89  6.30   6.42       6.81   -0.39   \n",
       "2     2005-02-02  湖北宜化  '000422  6.42  6.99  6.42   6.90       6.42    0.48   \n",
       "3     2005-02-03  湖北宜化  '000422  7.00  7.15  6.73   6.75       6.90   -0.15   \n",
       "4     2005-02-04  湖北宜化  '000422  6.75  7.05  6.71   7.00       6.75    0.25   \n",
       "...          ...   ...      ...   ...   ...   ...    ...        ...     ...   \n",
       "2647  2015-12-25  湖北宜化  '000422  8.03  8.05  7.93   8.03       7.99    0.04   \n",
       "2648  2015-12-28  湖北宜化  '000422  8.03  8.08  7.70   7.71       8.03   -0.32   \n",
       "2649  2015-12-29  湖北宜化  '000422  7.72  7.85  7.69   7.84       7.71    0.13   \n",
       "2650  2015-12-30  湖北宜化  '000422  7.86  7.93  7.75   7.93       7.84    0.09   \n",
       "2651  2015-12-31  湖北宜化  '000422  7.93  7.95  7.76   7.77       7.93   -0.16   \n",
       "\n",
       "       chg_pct       换手率    volume     amount         总市值        流通市值  \n",
       "0    -0.018732  0.018862   2669130   18135800  1678910000   963652000  \n",
       "1    -0.057269  0.027348   3869880   25333700  1582760000   908465000  \n",
       "2     0.074766  0.032928   4659550   31345900  1701090000   976388000  \n",
       "3    -0.021739  0.028556   4040880   28086200  1664110000   955162000  \n",
       "4     0.037037  0.017178   2430800   16818500  1725750000   990538000  \n",
       "...        ...       ...       ...        ...         ...         ...  \n",
       "2647  0.005006  0.021132  18974000  151673000  7209870000  7209870000  \n",
       "2648 -0.039851  0.030821  27672800  218869000  6922550000  6922550000  \n",
       "2649  0.016861  0.015886  14263800  110789000  7039280000  7039280000  \n",
       "2650  0.011480  0.018662  16755900  131567000  7120080000  7120080000  \n",
       "2651 -0.020177  0.015498  13915200  109318000  6976420000  6976420000  \n",
       "\n",
       "[2652 rows x 15 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pandas.read_csv(\"D:\\\\JUPYTER-DOCUMENTS\\\\湖北宜化_20050131_20151231.csv\", encoding=\"gbk\")\n",
    "# ..................................................\n",
    "df = df.rename(columns=COL_NAME_CONFUSED_TO_CSV_STANDARD)\n",
    "# ..................................................\n",
    "df = df.sort_values(\"date\", ascending=True).reset_index(drop=True)\n",
    "# ..................................................\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "ee7ec2b3-43e8-43cd-a1f0-0e80c574ef9a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>idx</th>\n",
       "      <th>year</th>\n",
       "      <th>month</th>\n",
       "      <th>day</th>\n",
       "      <th>code</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>pre_close</th>\n",
       "      <th>change</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>400</th>\n",
       "      <td>1</td>\n",
       "      <td>2006</td>\n",
       "      <td>9</td>\n",
       "      <td>26</td>\n",
       "      <td>'000422</td>\n",
       "      <td>4.66</td>\n",
       "      <td>4.72</td>\n",
       "      <td>4.63</td>\n",
       "      <td>4.64</td>\n",
       "      <td>4.71</td>\n",
       "      <td>-0.07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>401</th>\n",
       "      <td>2</td>\n",
       "      <td>2006</td>\n",
       "      <td>9</td>\n",
       "      <td>27</td>\n",
       "      <td>'000422</td>\n",
       "      <td>4.64</td>\n",
       "      <td>4.76</td>\n",
       "      <td>4.63</td>\n",
       "      <td>4.75</td>\n",
       "      <td>4.64</td>\n",
       "      <td>0.11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>402</th>\n",
       "      <td>3</td>\n",
       "      <td>2006</td>\n",
       "      <td>9</td>\n",
       "      <td>28</td>\n",
       "      <td>'000422</td>\n",
       "      <td>4.75</td>\n",
       "      <td>4.77</td>\n",
       "      <td>4.70</td>\n",
       "      <td>4.73</td>\n",
       "      <td>4.75</td>\n",
       "      <td>-0.02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>403</th>\n",
       "      <td>4</td>\n",
       "      <td>2006</td>\n",
       "      <td>9</td>\n",
       "      <td>29</td>\n",
       "      <td>'000422</td>\n",
       "      <td>4.75</td>\n",
       "      <td>4.84</td>\n",
       "      <td>4.73</td>\n",
       "      <td>4.82</td>\n",
       "      <td>4.73</td>\n",
       "      <td>0.09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404</th>\n",
       "      <td>5</td>\n",
       "      <td>2006</td>\n",
       "      <td>10</td>\n",
       "      <td>9</td>\n",
       "      <td>'000422</td>\n",
       "      <td>4.87</td>\n",
       "      <td>4.90</td>\n",
       "      <td>4.81</td>\n",
       "      <td>4.86</td>\n",
       "      <td>4.82</td>\n",
       "      <td>0.04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>596</th>\n",
       "      <td>191</td>\n",
       "      <td>2007</td>\n",
       "      <td>7</td>\n",
       "      <td>23</td>\n",
       "      <td>'000422</td>\n",
       "      <td>13.99</td>\n",
       "      <td>14.88</td>\n",
       "      <td>13.99</td>\n",
       "      <td>14.65</td>\n",
       "      <td>13.75</td>\n",
       "      <td>0.90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>597</th>\n",
       "      <td>192</td>\n",
       "      <td>2007</td>\n",
       "      <td>7</td>\n",
       "      <td>24</td>\n",
       "      <td>'000422</td>\n",
       "      <td>14.72</td>\n",
       "      <td>15.45</td>\n",
       "      <td>14.72</td>\n",
       "      <td>15.06</td>\n",
       "      <td>14.65</td>\n",
       "      <td>0.41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>598</th>\n",
       "      <td>193</td>\n",
       "      <td>2007</td>\n",
       "      <td>7</td>\n",
       "      <td>25</td>\n",
       "      <td>'000422</td>\n",
       "      <td>14.97</td>\n",
       "      <td>15.30</td>\n",
       "      <td>14.90</td>\n",
       "      <td>15.24</td>\n",
       "      <td>15.06</td>\n",
       "      <td>0.18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>599</th>\n",
       "      <td>194</td>\n",
       "      <td>2007</td>\n",
       "      <td>7</td>\n",
       "      <td>26</td>\n",
       "      <td>'000422</td>\n",
       "      <td>15.27</td>\n",
       "      <td>15.80</td>\n",
       "      <td>15.20</td>\n",
       "      <td>15.29</td>\n",
       "      <td>15.24</td>\n",
       "      <td>0.05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>600</th>\n",
       "      <td>195</td>\n",
       "      <td>2007</td>\n",
       "      <td>7</td>\n",
       "      <td>27</td>\n",
       "      <td>'000422</td>\n",
       "      <td>15.30</td>\n",
       "      <td>15.60</td>\n",
       "      <td>15.01</td>\n",
       "      <td>15.31</td>\n",
       "      <td>15.29</td>\n",
       "      <td>0.02</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>195 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     idx  year  month  day     code   open   high    low  close  pre_close  \\\n",
       "400    1  2006      9   26  '000422   4.66   4.72   4.63   4.64       4.71   \n",
       "401    2  2006      9   27  '000422   4.64   4.76   4.63   4.75       4.64   \n",
       "402    3  2006      9   28  '000422   4.75   4.77   4.70   4.73       4.75   \n",
       "403    4  2006      9   29  '000422   4.75   4.84   4.73   4.82       4.73   \n",
       "404    5  2006     10    9  '000422   4.87   4.90   4.81   4.86       4.82   \n",
       "..   ...   ...    ...  ...      ...    ...    ...    ...    ...        ...   \n",
       "596  191  2007      7   23  '000422  13.99  14.88  13.99  14.65      13.75   \n",
       "597  192  2007      7   24  '000422  14.72  15.45  14.72  15.06      14.65   \n",
       "598  193  2007      7   25  '000422  14.97  15.30  14.90  15.24      15.06   \n",
       "599  194  2007      7   26  '000422  15.27  15.80  15.20  15.29      15.24   \n",
       "600  195  2007      7   27  '000422  15.30  15.60  15.01  15.31      15.29   \n",
       "\n",
       "     change  \n",
       "400   -0.07  \n",
       "401    0.11  \n",
       "402   -0.02  \n",
       "403    0.09  \n",
       "404    0.04  \n",
       "..      ...  \n",
       "596    0.90  \n",
       "597    0.41  \n",
       "598    0.18  \n",
       "599    0.05  \n",
       "600    0.02  \n",
       "\n",
       "[195 rows x 11 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"date\" ] = df[\"date\"].astype(\"datetime64[ns]\")\n",
    "df[\"year\" ] = df[\"date\"].dt.year\n",
    "df[\"month\"] = df[\"date\"].dt.month\n",
    "df[\"day\"  ] = df[\"date\"].dt.day\n",
    "# ..................................................\n",
    "df = df[(400 <= df.index) & (df.index <= 600)]\n",
    "df = df[df[\"volume\"] != 0.0]\n",
    "# ..................................................\n",
    "FSP2X = Finance_Stock_Pandas_2_x()\n",
    "# ..................................................\n",
    "df = FSP2X.Calculate_Indicator(df)\n",
    "df = FSP2X.Calculate_Entanglement_Theory(df)\n",
    "# ..................................................\n",
    "df[[\"idx\", \"year\", \"month\", \"day\", \"code\", \"open\", \"high\", \"low\", \"close\", \"pre_close\", \"change\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "1f11631f-b0c9-4714-a58d-0d7ed5fbeacf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Example:\n",
      "\n",
      ">>> import matplotlib.pyplot as plt\n",
      ">>>\n",
      ">>> fig = plt.figure(figsize=(16, 9), dpi=96)\n",
      ">>> grid = plt.GridSpec(4, 1, figure=fig)\n",
      ">>> ax = plt.subplot(grid[0:3])\n",
      "...\n",
      ">>> FSM37X = Finance_Stock_Matplotlib_3_7_x()\n",
      ">>> FSM37X.Candlestick_Chart(ax, df, 'idx', 'open', 'high', 'low', 'close', 'change')\n",
      "...\n",
      "\n"
     ]
    }
   ],
   "source": [
    "FSM37X = Finance_Stock_Matplotlib_3_7_x()\n",
    "print(FSM37X.README)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "12dd0799-f4e1-49fd-81a1-be07db344ad1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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pQAAAChGSZXaa6+9tk6vUV9FlowzRs7I08yANmkosO/RET02yXo2RU2gBgAAQOsd1Kj759D+EffUZjmb4pH8PSVVQXf8NKJ77yg5ydd0wujS/NqgGZZ8AgAA5HmplI3xy1xL50pSEXRidWlWBpXy1wbNEKgBAADkslQqGdfAxvhlLodzBShOlnwCAADkY/kjQLGqX458+LC6KkNLu9dIhRoAAABrbDQAlFFVZRKgXT297n79SBMq1AAAAChYScfQZC+6G6fdGFWVVVlPB0qPStu1IlADAABYW0kVxyvP1S2Jos306tYrRgwaEUXBUjlKhc6tq2XJJwAAQLlLQqD6Wyu6mDZn6pCpTcaykUP3VygqOreulkANAACAD+hMmZsS7uhZtiEptIJADQAAgLZhY3OgRAnUAAAA8kx3TIDSpikBAADAurBxN1AMNMzIK4EaAADAurwRrd+4G4CyIVADAACgqJfVzhg5I73fd1zfjGcFZUBVbsoeagAAABSdgu1AqRFDpubMmRPLly/PehrFpfE52xr1Vbk9NolyJlADAADIwCWXXBLPP/98k2O33XZb3HzzzZnNibVYCpwsAS5RVZVVMXzg8HQsFrvsskvccccdWU+DMiBQAwAAyMB9990XZ555ZsPjd999N0499dSYPr1wqpqarQJTgVU2enXrFSMGjUjHYrFgwYL0Ro4s48yZQA0AACADo0aNinvvvTeee+659PG1114bNTU1MXz48KynBvlbHkg25s+KmFJdN7aGZZw5E6gBAABk4IADDohPfvKTceONN6aPx48fH6effnr07q1CBFhHC2ZH3DCmbqRNCNQAAAAyUFFREdXV1fH000+njxcvXhxnn312lNweWpaSASVIoAYAAJBhldrOO++c3h86dGjBVaflZQ8tS8mAEiRQAwAAyLBK7bzzzovKysoYOXJk1tMB2tmvf/3rOPTQQ7OeBmtBoAYAAJCh448/PhYtWhRbbLFF1lMB2tkrr7wSL7zwQvs1lLh5Zt0S7GRknQjUAAAAyqjT35z35sT4h8anI1BmLMHOG4EaAABAhgFXe3f6m1czLyY8MiEdC66BAZAfQ/s3Hck7gRoAAEB7aSbgKhV5aWAAUCQEagAAQOk7qOKDW5ZzKJVqke696/ZhSsY1OPHEE+Okk06KsqouzOHvpyi189dnmTKFSKAGAABQiloI8AZPHtxkbMt9mN5888248cYb4/rrr4+33noryqa6sNT3qWqrr6+F0LKtlinDuhCoAQAA5Hmvs6lDpjYZGzrsXT09ysnll18eXbp0ic6dO8cPfvCDrKdDoSvhJdGUHoEaAADAyryxX2dJddrPf/7z2GGHHWLHHXeMq666qvir1AD+R6AGAACQob7j+jbcSq06rUePHrHtttvGdtttF927d1elRt7YV42sCdQAAADKSLPLUduoOu073/lOdOzYMTp16hTnnntuWqU2c+bMNvu8FJYZI2fEY998LIYPHJ6O+WRfNbImUAMAACCv3n777TjggAPia1/7WsOxr3/967HffvvFggULoqgbPDRu9FCG++Llqle3XjFi0Ih0bCvLly+P999/f5XjNTU1bfY5QaAGAABAXu20005x1113RWVlZcOx5P4f//jH+PCHP5zp3Cg9Y8aMiUMOOSRqa2sbjt10002xzTbbZDovSptADQAAACjI/c+SvQUHTx682uckYdr9998ff/7znxsq1i688MIYPHj1fw7WhUANAAAAaDf53v/sE5/4RBx00EFRXV2dVqk9+uijMWPGjPjud7+bl9eH5gjUAAAAYG117x1xwui6kcyMHj06Hn744VixYkXcfvvtccIJJ0S/fv2ynhYlTKAGAAAAa6vHJhEnVteN5L/xQ45VakuWLIlZs2ZlW502f1bElOq6kZIlUAMAAABKokqtPlzLtDptweyIG8bUjZQsgRoAAAAlLZdN8FUXFa8kSDvzzDPjF7/4RUFX2tXU1MQuu+wSzz33XMOxZO+3I444In7zm9+010xZRwI1AACAlt4QF0sIlIOqyqoYPnB4OpaLnDbBV11U1H784x/HDjvs0LonZxSerrfeetGhQ4e0iUK9qVOnpnu/9enTp13nwtoTqAEAAJRBJ8R6vbr1ihGDRqQjlLV1DU+T8L3+Vh/K3VMbcfX0uvv1Y0T0Hde34ZZ8TyfLU3/3u9/FW2+9lVanJeHaYYcdFnvttVc+vjIKLVC76aabYp999omNNtooKioqYtmyZc0+78knn4zOnTvHJz/5yXzNEwAAIP/aqEKlHKvASloLIQl5VOx/xzmEckmg9vnPfz523XXXuO+++2LRokXxj3/8o2EPOEowUOvRo0cMGzYsrrjiihafs3jx4hgyZEh86lOfysf8AAAA2k4bLe9TBfaB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sXjx4qynAgAFQ6AGAAC06LXXXovnnnsu3nvvvdb9gfmzIqZU140AUKIEagAAQP4smB1xw5i6EQBKlEANAAAAAHIgUAMAAACAHHTK5ckAAAAtOqhilUN9x/VtuD948uCYMXJGO08KAPJPhRoAAAAA5ECgBgAAAABtFajddNNNsc8++8RGG20UFRUVsWzZsiYff/bZZ2PfffeNbt26xRZbbBHV1dVRW1uby6cAAAAAgNIJ1Hr06BHDhg2LK664YpWPvfPOO3HwwQfHoEGDYs6cOXH33XfHtdde2+xzAQAAAKAsArUkMDvuuONiu+22W+Vjv//972P58uVx8cUXR2VlZeyyyy5xzjnnxE9+8pMWX2/p0qVRU1PT5AYAAJSJ7r0jThhdNwJAOe6hNm3atNhtt92iU6cPGofuueee8fLLL8fChQub/TNjx46Nrl27Ntx69uyZr+kAAACFrscmESdW140AUI6BWhKabbzxxqssEa3/WHNGjRoVixYtarjNnTs3X9MBAAAKwIyRM2LqkKnp/foRAIrdB+Vk6yhpVPDGG280OTZ//vyGjzWnc+fO6Q0AAAAAyq5CbcCAAfH000836fz5xBNPpPuttRSoAQAApa+qsiqGDxyejgBQdoFa0nRg8eLFsWTJkvTx+++/nz5esWJFHHnkkdGxY8cYPXp02lxg+vTpMW7cuDjttNPaau4AAEAR6NWtV4wYNCIdAaDsArXrr78+7eCZdPtMbLDBBunjBx54IDbccMO4++670/tJc4EDDzwwTj755PjWt77VVnMHAAAAgMLeQ23IkCHprSW77rprPPjgg/mYFwAAAACU9h5qAABA6Tj22GPjzjvvbHIs2dKluro6szkBQKEQqAEAAKtYb7314uyzz073UU7MmjUrLrzwwujevXvWUwOAzAnUAACAVXz3u9+Nl156Kf7617+mj3/yk5/ERhttFF//+teznhoAZE6gBgAArKJfv35xwgknxA033JA+njRpUpx77rnRtWvXrKcGAJkTqAEAAC1Wqf33v/9N72+44Yaq0wDgfwRqAABAi1Vqn/70p9P7Z5xxRtPqtPmzIqZU140AUGYEagAAQIsuu+yy2GmnnWLEiBFNP7BgdsQNY+rGevfURlw9vd3nCADtrVO7f0YAAKBo7L777vH88883PXhQxQf3h/avC9IAoIyoUAMAAFJz3psT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8MMPR8eOHWOvvfaKnj17xh577BG33HJLs88fO3ZsGrrV35LnU76SQHXu3LlZTwOA1kqWTyYVYcmyw2QEAIAykddAbd68eeleadddd11ceeWVMXPmzBg1alQcd9xx6VLQlSUfS0K4+pswpbyNGzcujj766KynAZCT5OfX3//+91WOP/jgg0VZeb26yq5kk//xD41Pxwb2HgMAoAzldQ+1pAlBYsiQIbHnnnum95O28fvvv3/ceuutMXDgwFVazSc3SLzzzjuxcOHCrKcBkJNnn3029tlnn3jqqacajj3++OOx7777pnuI7r777lFsqiqrYvjA4enYeJP/eoN3GLzmrpkF+nWk7D0GAEAhVaglbeL79u2rAQFQ8t5+++3YddddY9asWVlPhYwl+4QOGDAgLrroooZjY8aMSY/vtttuUYySsGzEoBFFEZqVw9cBAEAZNCU444wzYvLkyTFt2rR0+eftt98ef/vb39JKNYBSMXv27PjnP/8Z//3vf7OeChlL/hGpuro6rcROgtZk+4I//vGP6bFy/Qem999/P6qqquLyyy/PeioAAFD4Sz4TI0aMSPeTOfzww9M3Fv369Yubb745/Zd6AChFn/vc59IqtX//+9/p4+Rn3sEHHxylJNlb7YU5L8TgyYPX+Nxf/OIXMX/+/Ljiiiti5MiRabOiXCX7tN047cY4fsDxKswAACj9CrXEeeedF6+//nq6J1ayp8wRRxzRFp8GgBJWW1sbDzzwQBRTldqbb76Z3jKtTsu462ZSnfa9730vDdGS5kTJP6qtjXk182LCIxPSsYn5syKmVNeNBWb77bePbbfdNutpAABQrIEaAKyrF198MT71qU/FSy+9FMVSpZYsc+zdu3f7Vac1Fy5l3HUzqU5LlkSvv/76sddee6V7yy1fvjw/L35QRcQxm0bcMKZuXEvJ1hRJNX2+TZkyJYYPH5731wUAoPAI1CDjCpy8vdGEErN06dJ0XLJkSRSDpCLtH//4R9rhs92q0xbMrguXkrEA1FenDR06NDp06BCf/exn02B0TVVqyfLO8Q+NT8e1ck/tB5V53Xuv9qmPPvponHTSSekcAQBgbQnUIEP33HNPbLfddllPA8iT5Pu5T58+7fPJkmqtof2jkFx33XVpddp3vvOd9PHmm28exx13XFx88cXp46lDpjYZ17i8MxetrMyrn0t9EwkA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+NaGQeQ6LzFuSWu7Y7YULuV6HhfouZXvpe/11WnV1dXpks9dd901BgwYkFapAQAA5EKgRrzxxhtx1FFHxZFHHpnX1504cWLU1tYtxxo/fnwUdcVQO88tH+FrQXQQXcdKshb3nmshAGrvJg/teW616b6KBRLst/Xf73333Rf77LNPHHrooenjJFQbO3Zs3H///Q3XKgAAgNYQqBGXXXZZOj788MPxyiuv5K067Uc/+lH069cvtt9++/jxj3+caZVaqcq5squ9g7MWKsnWudorlwCoQKuvSikYLhbnnHNO/OUvf0mDtHpJuDZz5swmxwAAANZEoFbmkuq0a665Jt2ge+ONN06XaOarOm358uVpoNa3b9/Mq9RKOWhps2WHucghOGtp/6uWAqN17v5aANVXjfdQbDK3UtkXr0gkoVmyd9rKunTpksl8AACA4lVRW0DrXGpqaqJr166xaNGiqKyszHo6ZeH0009PN+VetmxZ7L///vG73/0uXnzxxejTp886Vadtu+226Wv/v//3/9LXTvYqSqrUkgq4JLijbTXu/plUrn2414dzfo2cum427rzYuOtiLh0oy9Erz9V1qkwCtT47Zz2bstKrV6+4+OKL45vf/GbWUwEAAIowl1KhVsbqq9POP//8tHJjzz33jK222mqdq9ReffXV6N27d5x55pkNx0aMGBGbbbZZvPzyy1GMhg0bFp///OejZDWzZDMv+5EVQHVYQSuRKkkAAIByI1ArY7/61a9ik002iVNOOSV93KlTpxg1alRMnjw5VqxYsdavm1Sj/fvf/46qqg+WtiVVaf/6179i9913j2Izb968uPbaa+P222+PGTNmRFFrbq+zpLrsmE1XWbI5ePLgJmPDc+tvjV+jTJcuvv766+v2As0EjknR8M477xwTJkxY9wkCAADQJgRqZWzo0KFpI4L11luv4VgSrj311FPRocO6nRrNbfBdrJt+X3HFFenc119//bQjYNFqHJwlY+MlmmsThDXeL60MK63uuOOO+NCHPhTXX399Xl83CW6ff/75uPTSS9N9CAEAACg8ArUyllSNbb311k2OJcFR//79M5tTIVanJc0Ukr+T7bbbLqZMmVIUVWqNu382G5ytHKCtayBWhks767vj/vCHP0yryvIheZ3q6up04/yk82SypyEAAACFR6AGa6hO69ixY7oEb/PNN0+b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jYtf/vKXcffdd8ecOXNi0KBBcfDBB8e7776b9dTIUPLDJPmlMzkn/vWvf6WPk19SV/aTn/wkPVfqb8nFg/IzcODAJufBr3/96/T4O++8k15PkutKci4l15lrr702rrjiiqynTAaee+65JufJZZddFj179ozBgwc3POeOO+5o8pzklxZKX48ePWLYsGHNXhtacx3xu0z5WN25Mnfu3DjqqKPSAHbBggUxYcKEGDFiRNx6661NnpcEJI2vMw8//HA7fgUUwrnSmp85rivlY3XnyvHHH9/kHJk/f34aknzlK19p1e/ClNd75BUrVqTvh6uqquI///lPPPnkk2lYds455zQ857e//W2cf/75cd1118Xbb78dp5xyShx66KGrBHNtppa86tOnT+0VV1zR8Hjp0qW1vXr1qp0yZUqm86KwPP3000kpQO28efMajm2zzTa111xzTabzInujR4+uHTRoULMfmzx5cm3v3r3T60q95Hqz3XbbteMMKVQ77rhj7be//e2Gx8k15t577810TmTrr3/9a3oeNL5mtOY64neZ8tPcudKcI444onb48OENjydNmlS75ZZbtsMMKfRzZU0/c1xXyk9rriu//vWvaysrK2vnzp3bqt+FKa/3yPfff39tp06damfPnt3wnFtvvbW2a9eutTU1Nenj/fbbr/bMM89s8joDBgyoveiii9plzirU8ij517tXXnkl9tprr4ZjSQnrbrvtFk8//XSmc6Ow3HPPPbHNNtuk/4LTWJKuJwl8//794/vf/34sXbo0szmSneR60bt37/Qc+fKXvxz/93//lx6fNm1aej1Jriv19txzz3j55Zdj4cKFGc6YrN13333xwgsvxDe+8Y0mx0844YS0ai0pf7/mmmsymx+FY03XEb/L0JLk/EiWgSbnQmOzZs1Kq9SS2+c+97m0oo3y1NLPHNcVWvLTn/40jjnmmPT9T2t+F6a83iNPmzYttttuu7SKsfHvLIsWLUp/761/TuNrS/1z2uvaIlDLo/o3tBtvvHGT48kJ4c0u9f785z/HmDFj4mc/+1mT40mZ6owZM9JfTJOPJT9gvvvd72Y2T7LxxS9+MZ5//vn0PEiWzSSlzwceeGBa7p5cR5q7viRcY8pbcr045JBDYtttt21yrUl+AX3zzTfjkksuiW9/+9tx1VVXZTpPsrem64jfZWhOsl9N8qZ3xx13TEOTesk+WMk+WW+88UYapPXr1y/222+/dGkO5WV1P3NcV2hOsofegw8+mC4Pbe3vwpTXe+SFrXjv09Jz2uvaIlDLo2QzvUSydrexZG14/ccob0mTgeSHxA033JC++W3sU5/6VLrZYvIvdp/85CfTDTmvv/76zOZKNpLqxORfZpJfHrbccst0v5HkjUnyC0VyHWnu+pJwjSlf//3vf+O2225b5RfST3/60+kG0V26dEn3kkj2PnJNYU3XEb/LsLKkEiCpPHv//ffTPbIaVzcmlQM77LBD2pggqSD44Q9/GN27d4+77ror0znT/lb3M8d1hZb+MfBjH/tYWk3U2t+FKa/3yBu14r1PS89pr2uLQC2Pkl8gku4S//jHPxqOJV1N6pdXUN6SrjbJRpw333xzfOELX1jj85NfTnVvJPllIrkl58KAAQPS8uXG3ZKeeOKJ9A2NX0jL19VXXx1bb711k2YEzXFNIbGm64jfZVj5TUlSGZKEaH/84x/TbntrUv8zi/LW+GeO6wrNNchJwpOV/zFwTb8LU17vkQcMGJBWviZNchr/zpJ08/zwhz/c8JzG15b657TXtUWglmfJRSHpYpOUsNbU1KTtoTt37tyqAIXSlXTvTFr8Jul70tFoZS+++GJa8rx48eK0m8mjjz6aVqhpEV1+fvOb36SdbhIzZ86MU089NTbddNP4xCc+EUceeWTaRjy5riTXl+Q6k1xvTjvttKynTUaSNyTJPjVf//rX0zcv9Z566qm0E1KyTCt5TrInRdJtyzWlPCxfvjz9eVLfVj6pLKr/+dKa64jfZcrH6s6Vt956K62eTwL7P/zhD7H++uuv8ueTjp9JlWzyRjepEDj33HPTEG5NAT+lda605meO60r5WN25Ui+pXkz+/x977LE5/S5Meb1H3meffdKtBs4+++w0hH3ttdfiwgsvTDt51v9MSq4tSRVj8l46OeeSpebJ/mpDhgxpny+iXVoflJEVK1bUXnDBBbWbbrpp2rFkn332qX322WeznhYZS77Vkg4l3bp1a3J74IEH0o8/9thjtbvuumvtBhtsULvhhhum3frGjh1bu2TJkqynTjs7/PDD065XyfVjiy22qD322GNrX3zxxYaPP/PMM7Wf/OQn048n15mkE1Jy3aE8/e53v6tdb731mnQ/Stx+++3pdSS5znTv3j29vlx11VWZzZP2lXReTH7urHxLOq615jrid5nysbpzpbq6Or2fdFNr/LvLIYcc0vDnv/GNb9Ruttlm6XOS8+Wwww6rffLJJzP9mmj/c6U1P3NcV8rHmn4GJfr371971llnrdXvwpTPe+TEK6+8UnvooYemx6uqqmpPO+202sWLF9c2NnHixNoPfehDteuvv37tbrvtlnYHbS8VyX/aJ7oDAAAAgOJnyScAAAAA5ECgBgAAAAA5EKgBAAAAQA4EagAAAACQA4EaAAAAAORAoAYAAAAAORCoAQAAAEAOBGoAAAAAkAOBGgAAAADkQKAGAAAAADkQqAEAAABAtN7/B1d09g82fXdIAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1536x864 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(16, 9), dpi=96)\n",
    "grid = plt.GridSpec(4, 1, figure=fig)\n",
    "# ..................................................\n",
    "ax = plt.subplot(grid[0:3])\n",
    "# ..................................................\n",
    "FSM37X.Candlestick_Chart(ax, df, 'idx', 'open', 'high', 'low', 'close', 'change')\n",
    "FSM37X.Annotate_Upward(ax, df, 'idx', 'bottom', '')\n",
    "FSM37X.Annotate_Downward(ax, df, 'idx', 'top', '')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "00a5188a-8d40-468b-97b2-505947f1c50b",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
